package project.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import schronisko.MySQLConnection;
import utils.Email_Password;

/**
 * Servlet implementation class PasswordReminder
 */
@WebServlet("/PasswordReminder")
public class PasswordReminder extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public PasswordReminder() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		PrintWriter out = response.getWriter();
		// TODO Auto-generated method stub
		// wydobycie parametru "email" z formularza zawartego w
		// PasswordReminder.jsp
		String email = request.getParameter("email");
		// obiekt session z reguły jest tworzony automatycznie, jeżeli tak nie
		// jest należy go stworzyć samemu
		HttpSession s = request.getSession(true);
		// funkcja generująca tymczasowe hasło
		if (passwordreminder(email)) {
			// ustawianie zmiennej w sesji - "wyslano" to nazwa zmiennej, drugi
			// parametr to jej wartosc
			out.println ("Wiadomosc z haslem zostala wyslana na twoj adres email. Zaraz zostaniesz przekierowany na strone, gdzie bedziesz mogl zmienic haslo z tymczasowego na inne.");
			// przekierowanie do strony, gdzie uzytkownik moze zmienic haslo
			// tymczasowe
			response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
			response.setHeader("Refresh", "3; URL=user/change_pass.jsp");
		} else {
			// ustawianie zmiennej w sesji - "blad" to nazwa zmiennej, drugi
			// parametr to jej wartosc
			out.println("Nie ma takiego uzytkownika w bazie. Zaraz zostaniesz przekierowany do strony rejestracji.");
			// przekierowanie do strony, gdzie gosc moze sie zarejestrowac
			response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
			response.setHeader("Refresh", "3; URL=Register.jsp");
		}

	}

	public static boolean passwordreminder(String email) {
		try {  
			char[] chars = "0123456789ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();
			StringBuilder sb = new StringBuilder();
			Random random = new Random();
			for (int i = 0; i < 10; i++) {
			    char c = chars[random.nextInt(chars.length)];
			    sb.append(c);
			}
			
			String temp_password = sb.toString();
			
			MySQLConnection.connect().executeUpdate("UPDATE `login_data` SET `password` = '" + temp_password + "' where email = '"+email+"'");
			Email_Password.SendPasswordMail(email, temp_password);
			MySQLConnection.Close();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return false;
	}
}
